﻿/**********************************************************
 ●项目：Smartkernel
 ●公司：智能核心信息技术研发中心
 ●作者：曹艳白
 ●邮箱：caoyanbai@gmail.com
 ●创建：2008-08-10
**********************************************************/
using System.Collections.Generic;

namespace Smartkernel.Net.HtmlParser
{
    /// <summary>
    /// 提供HtmlParser相关功能的简便操作，Html解析是很常见的网络蜘蛛程序的基础。这个类是此命名空间下其他类的门面包装。
    /// 此命名空间下的其他类提供了几乎全面的Html解析功能。因目前还不清楚都需要什么功能，所以此类中只提供了简单的操作。
    /// 如果开发网络蜘蛛等程序，可以继续扩充。
    /// </summary>
    public static class SmartHtmlParser
    {
        /// <summary>
        /// 获得指定html文件中的Url列表
        /// </summary>
        /// <param name="html">html文件</param>
        /// <returns>返回Url列表</returns>
        public static List<string> GetUrlList(string html)
        {
            SmartDocument smartDocument = new SmartDocument(html);
            List<string> list = new List<string>();
            for (int i = 0; i < smartDocument.ChildTags.Count; i++)
            {
                SmartTag smartTag = smartDocument.ChildTags[i];
                GetUrlListRecursion(smartTag, list);
            }
            return list;
        }
        /// <summary>
        /// 递归查找标签的子标签
        /// </summary>
        /// <param name="smartTag">查找</param>
        /// <param name="list">保存结果的列表</param>
        private static void GetUrlListRecursion(SmartTag smartTag, List<string> list)
        {
            if (smartTag.Name == "a" && smartTag.TagType == SmartTagType.Open && smartTag.Attributes["href"] != null)
            {
                list.Add(smartTag.Attributes["href"].Value);
            }
            if (smartTag.HasChildTags)
            {
                for (int i = 0; i < smartTag.ChildTags.Count; i++)
                {
                    GetUrlListRecursion(smartTag.ChildTags[i], list);
                }
            }
        }
    }
}
